classdef MeasurementJob < handle
    properties
        boss
        name
        
        paramParser
        dataPackage
    end
    
    methods
        function obj = MeasurementJob(bossObj, jobname)
            obj.boss = bossObj;
            obj.name = jobname;
        end
        
        function run(obj, varargin)
            obj.parseParameters(varargin{:});
            obj.preprocess();
            obj.dataAcquisition();
            obj.analyze();
            obj.postprocess();
            obj.presentation();
        end
        
        function obj = parseParameters(obj, varargin)
            obj.paramParser.parse(varargin{:});
            obj.dataPackage.parameters = obj.paramParser.Results;
        end
    end
    
    methods (Abstract = true)
        obj = defineParameter(obj)
        obj = preprocess(obj)
        obj = dataAcquisition(obj)
        obj = analyze(obj)
        obj = postprocess(obj)
        obj = presentation(obj, viewer)
    end
end

